﻿#region Using Directives

    using System;

    using Csla;

    using MarketPulse.BusinessLogic.Core;

#endregion

namespace MarketPulse.Reporting.Core
{
    /// <summary>
    /// This class represents an individual score.
    /// </summary>
    [Serializable]
    public class ReportingScoreInfo : MarketPulseReadOnlyBase<ReportingScoreInfo>
    {

        #region Constructors

            /// <summary>
            /// default constructor is private in order to (try to) enforce construction
            /// only via the static factory methods provided.
            /// </summary>
            private ReportingScoreInfo()
            {
            }

        #endregion

        #region Methods

            #region Factory Methods

            #endregion

        #endregion

        #region Properties

            /// <summary>
            /// A key that can help relate and group related score objects from the same list.
            /// </summary>
            public static PropertyInfo<string> KeyProperty = RegisterProperty<string>(p => p.Key);
            /// <summary>
            /// A key that can help relate and group related score objects from the same list.
            /// </summary>
            public string Key
            {
                get { return GetProperty(KeyProperty); }
            }

            /// <summary>
            /// The label/name/identifier that this score refers to.
            /// </summary>
            public static PropertyInfo<string> LabelProperty = RegisterProperty<string>(p => p.Label);
            /// <summary>
            /// The label/name/identifier that this score refers to.
            /// </summary>
            public string Label
            {
                get { return GetProperty(LabelProperty); }
            }

            /// <summary>
            /// The amount of actual points scored.
            /// </summary>
            public static PropertyInfo<long> PointsScoredProperty = RegisterProperty<long>(p => p.PointsScored);
            /// <summary>
            /// The amount of actual points scored.
            /// </summary>
            public long PointsScored
            {
                get { return GetProperty(PointsScoredProperty); }
            }

            /// <summary>
            /// The amount of points that were available.
            /// </summary>
            public static PropertyInfo<long> PointsAvailableProperty = RegisterProperty<long>(p => p.PointsAvailable);
            /// <summary>
            /// The amount of points that were available.
            /// </summary>
            public long PointsAvailable
            {
                get { return GetProperty(PointsAvailableProperty); }
            }

        #endregion

    }
}